package com.nft.infrastructure.fisco.raw;

import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.*;
import org.fisco.bcos.sdk.abi.datatypes.generated.Int256;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@SuppressWarnings("unchecked")
public class DetailStorage extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506040805190810160405280600f81526020017f44657461696c53746f726167655f3400000000000000000000000000000000008152506040805190810160405280600a81526020017f7072696d6172794b6579000000000000000000000000000000000000000000008152506040805190810160405280600481526020017f6861736800000000000000000000000000000000000000000000000000000000815250606060405190810160405280603f8152602001620092c2603f913960006110019050606060026040519080825280602002602001820160405280156200011757816020015b6200010362000d0e565b815260200190600190039081620000f95790505b50905062000139846200050b6401000000000262002b15176401000000009004565b8160008151811015156200014957fe5b9060200190602002018190525062000175836200050b6401000000000262002b15176401000000009004565b8160018151811015156200018557fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff166356004b6a87876200022685620002096040805190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506200050b6401000000000262002b15176401000000009004565b6200053b6401000000000262002b43179091906401000000009004565b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401620002629392919062001052565b602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002b8919081019062000fea565b5060806040519081016040528087815260200186815260200185815260200160006040519080825280602002602001820160405280156200030e57816020015b6060815260200190600190039081620002f85790505b508152506000808201518160000190805190602001906200033192919062000d28565b5060208201518160010190805190602001906200035092919062000d28565b5060408201518160020190805190602001906200036f92919062000d28565b5060608201518160030190805190602001906200038e92919062000daf565b50905050620003af60008585620006cd640100000000026401000000009004565b5050505050506040805190810160405280600a81526020017f7072696d6172794b657900000000000000000000000000000000000000000000815250600490805190602001906200040292919062000e16565b506040805190810160405280600481526020017f6861736800000000000000000000000000000000000000000000000000000000815250600590805190602001906200045092919062000e16565b5062000485606060405190810160405280603f8152602001620092c2603f91396200086e640100000000026401000000009004565b600690805190602001906200049c92919062000e9d565b50620004a762000f04565b604051809103906000f080158015620004c4573d6000803e3d6000fd5b50600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062001100565b6200051562000f15565b600060208301905060408051908101604052808451815260200182815250915050919050565b6060600082511415620005615760206040519081016040528060008152509050620006c7565b60006001835103846000015102905060008090505b8351811015620005af5783818151811015156200058f57fe5b906020019060200201516000015182019150808060010191505062000576565b506060816040519080825280601f01601f191660200182016040528015620005e65781602001600182028038833980820191505090505b509050600060208201905060008090505b8551811015620006bf57620006558287838151811015156200061557fe5b906020019060200201516020015188848151811015156200063257fe5b9060200190602002015160000151620009e2640100000000026401000000009004565b85818151811015156200066457fe5b9060200190602002015160000151820191506001865103811015620006b157620006a78288602001518960000151620009e2640100000000026401000000009004565b8660000151820191505b8080600101915050620005f7565b508193505050505b92915050565b826003018290806001815401808255809150509060018203906000526020600020016000909192909190915090805190602001906200070e92919062000e16565b50506200071a62000f15565b62000739826200050b6401000000000262002b15176401000000009004565b90506200074562000f15565b620007996040805190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506200050b6401000000000262002b15176401000000009004565b905060006001620007c2838562000a2f6401000000000262002ca7179091906401000000009004565b01905060008090505b8181101562000865578660030162000819620007ff858762000aca6401000000000262002d1e179091906401000000009004565b62000af76401000000000262002d38176401000000009004565b90806001815401808255809150509060018203906000526020600020016000909192909190915090805190602001906200085592919062000e16565b50508080600101915050620007cb565b50505050505050565b60606200087a62000f15565b62000899836200050b6401000000000262002b15176401000000009004565b9050620008a562000f15565b620008f96040805190810160405280600181526020017f2c000000000000000000000000000000000000000000000000000000000000008152506200050b6401000000000262002b15176401000000009004565b90506060600162000922838562000a2f6401000000000262002ca7179091906401000000009004565b016040519080825280602002602001820160405280156200095857816020015b6060815260200190600190039081620009425790505b50905060008090505b8151811015620009d657620009ac62000992848662000aca6401000000000262002d1e179091906401000000009004565b62000af76401000000000262002d38176401000000009004565b8282815181101515620009bb57fe5b90602001906020020181905250808060010191505062000961565b50809350505050919050565b5b60208110151562000a0a5781518352602083019250602082019150602081039050620009e3565b60006001826020036101000a0390508019835116818551168181178652505050505050565b600080826000015162000a64856000015186602001518660000151876020015162000b6b640100000000026401000000009004565b0190505b83600001518460200151018111151562000ac3578180600101925050826000015162000aba85602001518303866000015103838660000151876020015162000b6b640100000000026401000000009004565b01905062000a68565b5092915050565b62000ad462000f15565b62000af083838362000c5b640100000000026401000000009004565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801562000b325781602001600182028038833980820191505090505b509050600060208201905062000b618185602001518660000151620009e2640100000000026401000000009004565b8192505050919050565b6000808490506000868511151562000c4b5760208511151562000bff57600060018660200360080260020a0319600102905060008186511690506000878a8a0103905060008386511690505b828114151562000bf057818610151562000bdc578a8a01965050505050505062000c53565b858060010196505083865116905062000bb7565b85965050505050505062000c53565b60008585209050600091505b8588038211151562000c4957600086842090508082141562000c34578394505050505062000c53565b60018401935050818060010192505062000c0b565b505b868601925050505b949350505050565b62000c6562000f15565b600062000c94856000015186602001518660000151876020015162000b6b640100000000026401000000009004565b9050846020015183602001818152505084602001518103836000018181525050846000015185602001510181141562000cd857600085600001818152505062000d03565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b604080519081016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000d6b57805160ff191683800117855562000d9c565b8280016001018555821562000d9c579182015b8281111562000d9b57825182559160200191906001019062000d7e565b5b50905062000dab919062000f2f565b5090565b82805482825590600052602060002090810192821562000e03579160200282015b8281111562000e0257825182908051906020019062000df192919062000d28565b509160200191906001019062000dd0565b5b50905062000e12919062000f57565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000e5957805160ff191683800117855562000e8a565b8280016001018555821562000e8a579182015b8281111562000e8957825182559160200191906001019062000e6c565b5b50905062000e99919062000f2f565b5090565b82805482825590600052602060002090810192821562000ef1579160200282015b8281111562000ef057825182908051906020019062000edf92919062000d28565b509160200191906001019062000ebe565b5b50905062000f00919062000f57565b5090565b6040516151f680620040cc83390190565b604080519081016040528060008152602001600081525090565b62000f5491905b8082111562000f5057600081600090555060010162000f36565b5090565b90565b62000f8591905b8082111562000f81576000818162000f77919062000f88565b5060010162000f5e565b5090565b90565b50805460018160011615610100020316600290046000825580601f1062000fb0575062000fd1565b601f01602090049060005260206000209081019062000fd0919062000f2f565b5b50565b600062000fe28251620010af565b905092915050565b60006020828403121562000ffd57600080fd5b6000","6200100d8482850162000fd4565b91505092915050565b60006200102382620010a4565b80845262001039816020860160208601620010b9565b6200104481620010ef565b602085010191505092915050565b600060608201905081810360008301526200106e818662001016565b9050818103602083015262001084818562001016565b905081810360408301526200109a818462001016565b9050949350505050565b600081519050919050565b6000819050919050565b60005b83811015620010d9578082015181840152602081019050620010bc565b83811115620010e9576000848401525b50505050565b6000601f19601f8301169050919050565b612fbc80620011106000396000f3fe608060405234801561001057600080fd5b5060043610610069576000357c01000000000000000000000000000000000000000000000000000000009004806327f6aae01461006e57806356b724981461009f57806360bf140a146100cf57806396029efe14610100575b600080fd5b6100886004803603610083919081019061236d565b610131565b60405161009692919061276f565b60405180910390f35b6100b960048036036100b491908101906124e5565b61023c565b6040516100c69190612739565b60405180910390f35b6100e960048036036100e49190810190612463565b61036e565b6040516100f792919061276f565b60405180910390f35b61011a6004803603610115919081019061236d565b6103be565b60405161012892919061276f565b60405180910390f35b6000606061022f6040805190810160405280600681526020017f64657461696c00000000000000000000000000000000000000000000000000008152506006600081548110151561017e57fe5b906000526020600020018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561021c5780601f106101f15761010080835404028352916020019161021c565b820191906000526020600020905b8154815290600101906020018083116101ff57829003601f168201915b505050505061022a866104c9565b610883565b8092508193505050915091565b60006060600560405190808252806020026020018201604052801561027557816020015b60608152602001906001900390816102605790505b5090508681600081518110151561028857fe5b90602001906020020181905250858160018151811015156102a557fe5b90602001906020020181905250848160028151811015156102c257fe5b906020019060200201819052506102d842610b60565b8160038151811015156102e757fe5b906020019060200201819052508281600481518110151561030457fe5b9060200190602002018190525060006103536040805190810160405280600681526020017f64657461696c00000000000000000000000000000000000000000000000000008152508684610bf3565b1461035f576000610362565b60015b91505095945050505050565b600060606103b16040805190810160405280600681526020017f64657461696c000000000000000000000000000000000000000000000000000081525084611013565b8092508193505050915091565b600060606104bc6040805190810160405280600681526020017f64657461696c00000000000000000000000000000000000000000000000000008152506006600181548110151561040b57fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b50505050506104b7866104c9565b610883565b8092508193505050915091565b606060008273ffffffffffffffffffffffffffffffffffffffff16600102905060606040805190810160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506060602a6040519080825280601f01601f1916602001820160405280156105595781602001600182028038833980820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110151561058c57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811015156105ec57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b60148110156108775782600485600c840160208110151561063f57fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908060020a82049150507f0100000000000000000000000000000000000000000000000000000000000000900460ff168151811015156106c057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260020181518110151561071f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f7f01000000000000000000000000000000000000000000000000000000000000000285600c840160208110151561078557fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff168151811015156107db57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260030181518110151561083a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050610622565b50809350505050919050565b6000606060006108916112f3565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156108f757600080fd5b505afa15801561090b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061092f9190810190612396565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d187876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610988929190612866565b60006040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3989846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610a11929190612806565b60206040518083038186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a6191908101906123bf565b9050610b516000600301805480602002602001604051908101604052809291908181526020016000905b82821015610b47578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b505050505081526020019060010190610a8b565b50505050826113a9565b94509450505050935093915050565b60606000821415610ba8576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610bee565b5b600082141515610bed576000600a83811515610bc157fe5b069050600a83811515610bd057fe5b049250610be5610bdf82611982565b83611b6a565b915050610ba9565b5b919050565b60006001600060030180549050038251141515610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c9061292d565b60405180910390fd5b600080610c506112f3565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cee91908101906123e8565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b5166000600101896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d4b9291906128f6565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b5166000600201886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610dd89291906128f6565b600060405180830381600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b505050506000600190505b600060030180549050811015610eec578173ffffffffffffffffffffffffffffffffffffffff1663e942b516600060030183815481101515610e4f57fe5b906000526020600020018860018503815181101515610e6a57fe5b906020019060200201516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ead9291906128bf565b600060405180830381600087803b158015610ec757600080fd5b505af1158015610edb573d6000803e3d6000fd5b505050508080600101915050610e11565b508173","ffffffffffffffffffffffffffffffffffffffff166331afac3688836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f44929190612836565b602060405180830381600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f96919081019061243a565b60011415610fa75760009250610fcb565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe92505b7f9994ba29bf7f93f869f42bc2c06a947ca883df73b7c6eb95482a190d7e437cd2838888604051610ffe9392919061279f565b60405180910390a18293505050509392505050565b6000606060006110216112f3565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110bf9190810190612396565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d16000600201876040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161111c9291906128f6565b60006040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3988846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111a5929190612806565b60206040518083038186803b1580156111bd57600080fd5b505afa1580156111d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111f591908101906123bf565b90506112e56000600301805480602002602001604051908101604052809291908181526020016000905b828210156112db578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112c75780601f1061129c576101008083540402835291602001916112c7565b820191906000526020600020905b8154815290600101906020018083116112aa57829003601f168201915b50505050508152602001906001019061121f565b50505050826113a9565b945094505050509250929050565b60008061100190508073ffffffffffffffffffffffffffffffffffffffff1663f23f63c9600080016040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611353919061289d565b60206040518083038186803b15801561136b57600080fd5b505afa15801561137f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113a39190810190612411565b91505090565b60006060808373ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561141057600080fd5b505afa158015611424573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611448919081019061243a565b6000141561147f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81819150925092505061197b565b6040805190810160405280600181526020017f5b00000000000000000000000000000000000000000000000000000000000000815250905060008090505b8473ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561151f57600080fd5b505afa158015611533573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611557919081019061243a565b81101561192d57606061160e878773ffffffffffffffffffffffffffffffffffffffff1663846719e0856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016115b99190612754565b60206040518083038186803b1580156115d157600080fd5b505afa1580156115e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061160991908101906123e8565b611d3d565b905060008090505b81518110156118375760008114156116b9576116b6846040805190810160405280600a81526020017f7b22696e646578223a220000000000000000000000000000000000000000000081525084600081518110151561167157fe5b906020019060200201516040805190810160405280600381526020017f222c7b0000000000000000000000000000000000000000000000000000000000815250611e7b565b93505b611794846040805190810160405280600181526020017f22000000000000000000000000000000000000000000000000000000000000008152508a8481518110151561170157fe5b906020019060200201516040805190810160405280600381526020017f223a220000000000000000000000000000000000000000000000000000000000815250868681518110151561174f57fe5b906020019060200201516040805190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250611f3e565b935060018251038114156117e8576117e1846040805190810160405280600281526020017f7d7d00000000000000000000000000000000000000000000000000000000000081525061203d565b935061182a565b611827846040805190810160405280600181526020017f2c0000000000000000000000000000000000000000000000000000000000000081525061203d565b93505b8080600101915050611616565b5060018673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118d4919081019061243a565b038214151561191f5761191c836040805190810160405280600181526020017f2c0000000000000000000000000000000000000000000000000000000000000081525061203d565b92505b5080806001019150506114bd565b5061196d816040805190810160405280600181526020017f5d0000000000000000000000000000000000000000000000000000000000000081525061203d565b905060008181915092509250505b9250929050565b6060806040805190810160405280601081526020017f30313233343536373839616263646566000000000000000000000000000000008152509050606083604051602001808281526020019150506040516020818303038152906040529050606060016040519080825280601f01601f191660200182016040528015611a175781602001600182028038833980820191505090505b50905060006001835103905083600f7f0100000000000000000000000000000000000000000000000000000000000000028483815181101515611a5657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff16815181101515611ad457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826000815181101515611b2e57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081945050505050919050565b6060808390506060839050606081518351016040519080825280601f01601f191660200182016040528015611bae5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b8551811015611c74578581815181101515611bd857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515611c3757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611bc1565b5060008090505b8451811015611d2e578481815181101515611c9257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028383806001019450815181101515611cf157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611c7b565b50829550505050505092915050565b6060808351604051908082528060200260200182016040528015611d7557816020015b6060815260200190600190039081611d605790505b50905060008090505b8451811015611e70578373ffffffffffffffffffffffffffffffffffffffff16639c981fcb8683815181101515611db157fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611df391906127e4565b60006040518083038186803b158015611e0b57600080fd5b505afa158015611e1f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611e4891908101906124a4565b8282815181101515611e5657fe5b906020019060200201819052508080600101915050611d7e565b508091505092915050565b6060806004604051908082528060200260200182016040528015611eb357816020015b6060815260200190600190039081611e9e5790505b50905085816000815181101515611ec657fe5b9060200190602002018190525084816001815181101515611ee357fe5b906020019060200201819052","5083816002815181101515611f0057fe5b9060200190602002018190525082816003815181101515611f1d57fe5b90602001906020020181905250611f33816120c4565b915050949350505050565b6060806006604051908082528060200260200182016040528015611f7657816020015b6060815260200190600190039081611f615790505b50905087816000815181101515611f8957fe5b9060200190602002018190525086816001815181101515611fa657fe5b9060200190602002018190525085816002815181101515611fc357fe5b9060200190602002018190525084816003815181101515611fe057fe5b9060200190602002018190525083816004815181101515611ffd57fe5b906020019060200201819052508281600581518110151561201a57fe5b90602001906020020181905250612030816120c4565b9150509695505050505050565b606080600260405190808252806020026020018201604052801561207557816020015b60608152602001906001900390816120605790505b5090508381600081518110151561208857fe5b90602001906020020181905250828160018151811015156120a557fe5b906020019060200201819052506120bb816120c4565b91505092915050565b6060600080905060008090505b83518110156121045783818151811015156120e857fe5b90602001906020020151518201915080806001019150506120d1565b506060816040519080825280601f01601f19166020018201604052801561213a5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b865181101561223c576060878281518110151561216657fe5b90602001906020020151905060008090505b815181101561222d57818181518110151561218f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000285858151811015156121e857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450508080600101915050612178565b5050808060010191505061214d565b5081945050505050919050565b60006122558235612a16565b905092915050565b60006122698251612a28565b905092915050565b600061227d8251612a3a565b905092915050565b60006122918251612a4c565b905092915050565b60006122a58251612a5e565b905092915050565b60006122b98251612a70565b905092915050565b600082601f83011215156122d457600080fd5b81356122e76122e28261297a565b61294d565b9150808252602083016020830185838301111561230357600080fd5b61230e838284612ac2565b50505092915050565b600082601f830112151561232a57600080fd5b815161233d6123388261297a565b61294d565b9150808252602083016020830185838301111561235957600080fd5b612364838284612ad1565b50505092915050565b60006020828403121561237f57600080fd5b600061238d84828501612249565b91505092915050565b6000602082840312156123a857600080fd5b60006123b68482850161225d565b91505092915050565b6000602082840312156123d157600080fd5b60006123df84828501612271565b91505092915050565b6000602082840312156123fa57600080fd5b600061240884828501612285565b91505092915050565b60006020828403121561242357600080fd5b600061243184828501612299565b91505092915050565b60006020828403121561244c57600080fd5b600061245a848285016122ad565b91505092915050565b60006020828403121561247557600080fd5b600082013567ffffffffffffffff81111561248f57600080fd5b61249b848285016122c1565b91505092915050565b6000602082840312156124b657600080fd5b600082015167ffffffffffffffff8111156124d057600080fd5b6124dc84828501612317565b91505092915050565b600080600080600060a086880312156124fd57600080fd5b600086013567ffffffffffffffff81111561251757600080fd5b612523888289016122c1565b955050602086013567ffffffffffffffff81111561254057600080fd5b61254c888289016122c1565b945050604086013567ffffffffffffffff81111561256957600080fd5b612575888289016122c1565b935050606086013567ffffffffffffffff81111561259257600080fd5b61259e888289016122c1565b925050608086013567ffffffffffffffff8111156125bb57600080fd5b6125c7888289016122c1565b9150509295509295909350565b6125dd816129e0565b82525050565b6125ec81612a7a565b82525050565b6125fb81612a9e565b82525050565b61260a816129ec565b82525050565b600061261b826129c3565b80845261262f816020860160208601612ad1565b61263881612b04565b602085010191505092915050565b6000612651826129b8565b808452612665816020860160208601612ad1565b61266e81612b04565b602085010191505092915050565b60008154600181166000811461269957600181146126b9576126fa565b607f600283041680865260ff1983166020870152604086019350506126fa565b600282048086526020860195506126cf856129a6565b60005b828110156126f1578154818901526001820191506020810190506126d2565b80880195505050505b505092915050565b6000601582527fe58f82e695b0e695b0e9878fe4b88de6ada3e7a1ae00000000000000000000006020830152604082019050919050565b600060208201905061274e60008301846125d4565b92915050565b60006020820190506127696000830184612601565b92915050565b60006040820190506127846000830185612601565b81810360208301526127968184612610565b90509392505050565b60006060820190506127b46000830186612601565b81810360208301526127c68185612610565b905081810360408301526127da8184612610565b9050949350505050565b600060208201905081810360008301526127fe8184612646565b905092915050565b600060408201905081810360008301526128208185612610565b905061282f60208301846125e3565b9392505050565b600060408201905081810360008301526128508185612610565b905061285f60208301846125f2565b9392505050565b600060408201905081810360008301526128808185612610565b905081810360208301526128948184612610565b90509392505050565b600060208201905081810360008301526128b7818461267c565b905092915050565b600060408201905081810360008301526128d9818561267c565b905081810360208301526128ed8184612646565b90509392505050565b60006040820190508181036000830152612910818561267c565b905081810360208301526129248184612610565b90509392505050565b6000602082019050818103600083015261294681612702565b9050919050565b6000604051905081810181811067ffffffffffffffff8211171561297057600080fd5b8060405250919050565b600067ffffffffffffffff82111561299157600080fd5b601f19601f8301169050602081019050919050565b60008160005260206000209050919050565b600081519050919050565b600081519050919050565b60006129d9826129f6565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a21826129f6565b9050919050565b6000612a33826129ce565b9050919050565b6000612a45826129ce565b9050919050565b6000612a57826129ce565b9050919050565b6000612a69826129ce565b9050919050565b6000819050919050565b6000612a8582612a8c565b9050919050565b6000612a97826129f6565b9050919050565b6000612aa982612ab0565b9050919050565b6000612abb826129f6565b9050919050565b82818337600083830152505050565b60005b83811015612aef578082015181840152602081019050612ad4565b83811115612afe576000848401525b50505050565b6000601f19601f8301169050919050565b612b1d612f68565b600060208301905060408051908101604052808451815260200182815250915050919050565b6060600082511415612b675760206040519081016040528060008152509050612ca1565b60006001835103846000015102905060008090505b8351811015612bb2578381815181101515612b9357fe5b9060200190602002015160000151820191508080600101915050612b7c565b506060816040519080825280601f01601f191660200182016040528015612be85781602001600182028038833980820191505090505b509050600060208201905060008090505b8551811015612c9957612c43828783815181101515612c1457fe5b90602001906020020151602001518884815181101515612c3057fe5b9060200190602002015160000151612d9a565b8581815181101515612c5157fe5b9060200190602002015160000151820191506001865103811015612c8c57612c828288602001518960000151612d9a565b8660000151820191505b8080600101915050612bf9565b508193505050505b92915050565b6000808260000151612ccb8560000151866020015186600001518760200151612de5565b0190505b836000015184602001510181111515612d175781806001019250508260000151612d0f856020015183038660000151038386600001518760200151612de5565b019050612ccf565b5092915050565b612d26612f68565b612d31838383612eca565b5092915050565b60608082600001516040519080825280601f01601f191660200182016040528015612d725781602001600182028038833980820191505090505b5090506000602082019050612d908185602001518660000151612d9a565b8192505050919050565b5b602081101515612dc05781518352602083019250602082019150602081039050612d9b565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008084905060008685111515612eba57602085111515612e7257600060018660200360080260020a0319600102905060008186511690506000878a8a0103905060008386511690505b8281141515612e64578186101515612e51578a8a019650505050505050612ec2565b8580600101965050838651169050612e2f565b859650505050505050612ec2565b60008585209050600091505b85880382111515612eb8576000868420905080821415612ea45783945050505050612ec2565b600184019350508180600101925050612e7e565b505b868601925050505b949350505050565b612ed2612f68565b6000612ef08560000151866020015186600001518760200151612de556","5b90508460200151836020018181525050846020015181038360000181815250508460000151856020015101811415612f32576000856000018181525050612f5d565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b60408051908101604052806000815260200160008152509056fea265627a7a72305820d1922ddc81e476def03d9f2637bc3094fe7fb1c3947afd1441ee199ef464bb516c6578706572696d656e74616cf5003760806040523480156200001157600080fd5b506040805190810160405280600b81526020017f53656c6c5374726f6167650000000000000000000000000000000000000000008152506040805190810160405280600281526020017f69640000000000000000000000000000000000000000000000000000000000008152506040805190810160405280600481526020017f68617368000000000000000000000000000000000000000000000000000000008152506040805190810160405280601b81526020017f616d6f756e742c72656d61696e2c6175746865722c737461747573000000000081525060006110019050606060026040519080825280602002602001820160405280156200013257816020015b6200011e62000cdc565b815260200190600190039081620001145790505b5090506200015484620004d96401000000000262003c82176401000000009004565b8160008151811015156200016457fe5b906020019060200201819052506200019083620004d96401000000000262003c82176401000000009004565b816001815181101515620001a057fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff166356004b6a87876200024185620002246040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250620004d96401000000000262003c82176401000000009004565b620005096401000000000262003cb0179091906401000000009004565b6040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200027d939291906200100f565b602060405180830381600087803b1580156200029857600080fd5b505af1158015620002ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620002d3919081019062000fa7565b5060806040519081016040528087815260200186815260200185815260200160006040519080825280602002602001820160405280156200032957816020015b6060815260200190600190039081620003135790505b508152506000808201518160000190805190602001906200034c92919062000cf6565b5060208201518160010190805190602001906200036b92919062000cf6565b5060408201518160020190805190602001906200038a92919062000cf6565b506060820151816003019080519060200190620003a992919062000d7d565b50905050620003ca600085856200069b640100000000026401000000009004565b5050505050506040805190810160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250600490805190602001906200041d92919062000de4565b506040805190810160405280600481526020017f6861736800000000000000000000000000000000000000000000000000000000815250600590805190602001906200046b92919062000de4565b50620004bb6040805190810160405280601b81526020017f616d6f756e742c72656d61696e2c6175746865722c73746174757300000000008152506200083c640100000000026401000000009004565b60069080519060200190620004d292919062000e6b565b50620010bd565b620004e362000ed2565b600060208301905060408051908101604052808451815260200182815250915050919050565b60606000825114156200052f576020604051908101604052806000815250905062000695565b60006001835103846000015102905060008090505b83518110156200057d5783818151811015156200055d57fe5b906020019060200201516000015182019150808060010191505062000544565b506060816040519080825280601f01601f191660200182016040528015620005b45781602001600182028038833980820191505090505b509050600060208201905060008090505b85518110156200068d5762000623828783815181101515620005e357fe5b906020019060200201516020015188848151811015156200060057fe5b9060200190602002015160000151620009b0640100000000026401000000009004565b85818151811015156200063257fe5b90602001906020020151600001518201915060018651038110156200067f57620006758288602001518960000151620009b0640100000000026401000000009004565b8660000151820191505b8080600101915050620005c5565b508193505050505b92915050565b82600301829080600181540180825580915050906001820390600052602060002001600090919290919091509080519060200190620006dc92919062000de4565b5050620006e862000ed2565b6200070782620004d96401000000000262003c82176401000000009004565b90506200071362000ed2565b620007676040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250620004d96401000000000262003c82176401000000009004565b905060006001620007908385620009fd6401000000000262003e14179091906401000000009004565b01905060008090505b81811015620008335786600301620007e7620007cd858762000a986401000000000262003e8b179091906401000000009004565b62000ac56401000000000262003ea5176401000000009004565b90806001815401808255809150509060018203906000526020600020016000909192909190915090805190602001906200082392919062000de4565b5050808060010191505062000799565b50505050505050565b60606200084862000ed2565b6200086783620004d96401000000000262003c82176401000000009004565b90506200087362000ed2565b620008c76040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250620004d96401000000000262003c82176401000000009004565b905060606001620008f08385620009fd6401000000000262003e14179091906401000000009004565b016040519080825280602002602001820160405280156200092657816020015b6060815260200190600190039081620009105790505b50905060008090505b8151811015620009a4576200097a62000960848662000a986401000000000262003e8b179091906401000000009004565b62000ac56401000000000262003ea5176401000000009004565b82828151811015156200098957fe5b9060200190602002018190525080806001019150506200092f565b50809350505050919050565b5b602081101515620009d85781518352602083019250602082019150602081039050620009b1565b60006001826020036101000a0390508019835116818551168181178652505050505050565b600080826000015162000a32856000015186602001518660000151876020015162000b39640100000000026401000000009004565b0190505b83600001518460200151018111151562000a91578180600101925050826000015162000a8885602001518303866000015103838660000151876020015162000b39640100000000026401000000009004565b01905062000a36565b5092915050565b62000aa262000ed2565b62000abe83838362000c29640100000000026401000000009004565b5092915050565b60608082600001516040519080825280601f01601f19166020018201604052801562000b005781602001600182028038833980820191505090505b509050600060208201905062000b2f8185602001518660000151620009b0640100000000026401000000009004565b8192505050919050565b6000808490506000868511151562000c195760208511151562000bcd57600060018660200360080260020a0319600102905060008186511690506000878a8a0103905060008386511690505b828114151562000bbe57818610151562000baa578a8a01965050505050505062000c21565b858060010196505083865116905062000b85565b85965050505050505062000c21565b60008585209050600091505b8588038211151562000c1757600086842090508082141562000c02578394505050505062000c21565b60018401935050818060010192505062000bd9565b505b868601925050505b949350505050565b62000c3362000ed2565b600062000c62856000015186602001518660000151876020015162000b39640100000000026401000000009004565b9050846020015183602001818152505084602001518103836000018181525050846000015185602001510181141562000ca657600085600001818152505062000cd1565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b604080519081016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000d3957805160ff191683800117855562000d6a565b8280016001018555821562000d6a579182015b8281111562000d6957825182559160200191906001019062000d4c565b5b50905062000d79919062000eec565b5090565b82805482825590600052602060002090810192821562000dd1579160200282015b8281111562000dd057825182908051906020019062000dbf92919062000cf6565b509160200191906001019062000d9e565b5b50905062000de0919062000f14565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000e2757805160ff191683800117855562000e58565b8280016001018555821562000e58579182015b8281111562000e5757825182559160200191906001019062000e3a565b5b50905062000e67919062000eec565b5090565b82805482825590600052602060002090810192821562000ebf579160200282015b8281111562000ebe57825182908051906020019062000ead92919062000cf6565b509160200191906001019062000e8c565b5b50905062000ece919062000f14565b5090565b604080519081016040528060008152602001600081525090565b62000f1191905b8082111562000f0d57600081600090555060010162000ef3565b5090565b90565b62000f4291905b8082111562000f3e576000818162000f34919062000f4556","5b5060010162000f1b565b5090565b90565b50805460018160011615610100020316600290046000825580601f1062000f6d575062000f8e565b601f01602090049060005260206000209081019062000f8d919062000eec565b5b50565b600062000f9f82516200106c565b905092915050565b60006020828403121562000fba57600080fd5b600062000fca8482850162000f91565b91505092915050565b600062000fe08262001061565b80845262000ff681602086016020860162001076565b6200100181620010ac565b602085010191505092915050565b600060608201905081810360008301526200102b818662000fd3565b9050818103602083015262001041818562000fd3565b9050818103604083015262001057818462000fd3565b9050949350505050565b600081519050919050565b6000819050919050565b60005b838110156200109657808201518184015260208101905062001079565b83811115620010a6576000848401525b50505050565b6000601f19601f8301169050919050565b61412980620010cd6000396000f3fe608060405234801561001057600080fd5b506004361061009a576000357c010000000000000000000000000000000000000000000000000000000090048063c58d7d4e11610078578063c58d7d4e1461012f578063d43ed1b11461015f578063e159972d1461018f578063eaa4f96b146101bf5761009a565b80634041cb0e1461009f57806363c2e8d9146100cf578063a6a7cbf8146100ff575b600080fd5b6100b960048036036100b49190810190613544565b6101ef565b6040516100c691906137fc565b60405180910390f35b6100e960048036036100e49190810190613544565b6104b3565b6040516100f69190613817565b60405180910390f35b610119600480360361011491908101906135c6565b610718565b60405161012691906137fc565b60405180910390f35b61014960048036036101449190810190613544565b61088e565b6040516101569190613817565b60405180910390f35b61017960048036036101749190810190613544565b610af3565b60405161018691906137fc565b60405180910390f35b6101a960048036036101a49190810190613544565b610b1b565b6040516101b691906137fc565b60405180910390f35b6101d960048036036101d49190810190613544565b610dc4565b6040516101e691906138b4565b60405180910390f35b6000806101fb836104b3565b9050600061020761103c565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561026d57600080fd5b505afa158015610281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506102a591908101906134c9565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516600660018154811015156102d357fe5b906000526020600020016102e9600187036110f2565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610322929190613a04565b600060405180830381600087803b15801561033c57600080fd5b505af1158015610350573d6000803e3d6000fd5b5050505060018273ffffffffffffffffffffffffffffffffffffffff1663bf2b70a187848673ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156103d657600080fd5b505afa1580156103ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061040e9190810190613477565b6040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161044893929190613936565b602060405180830381600087803b15801561046257600080fd5b505af1158015610476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061049a919081019061351b565b146104a65760006104a9565b60015b9350505050919050565b6000606060006040519080825280602002602001820160405280156104ec57816020015b60608152602001906001900390816104d75790505b50905060006104fc848384611185565b905060008173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561056257600080fd5b505afa158015610576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061059a919081019061351b565b14156105ab57600092505050610713565b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016106019190613877565b60206040518083038186803b15801561061957600080fd5b505afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061065191908101906134c9565b73ffffffffffffffffffffffffffffffffffffffff1663fda69fae6006600181548110151561067c57fe5b906000526020600020016040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016106be91906139ab565b60206040518083038186803b1580156106d657600080fd5b505afa1580156106ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061070e919081019061351b565b925050505b919050565b60008061072484611549565b5090506000811415151561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490613a70565b60405180910390fd5b606060046040519080825280602002602001820160405280156107a457816020015b606081526020019060019003908161078f5790505b5090506107b0846110f2565b8160008151811015156107bf57fe5b906020019060200201819052506107d5846110f2565b8160018151811015156107e457fe5b906020019060200201819052506107fa33611796565b81600281518110151561080957fe5b906020019060200201819052506040805190810160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081600381518110151561085b57fe5b906020019060200201819052506000610875868784611b50565b14610881576000610884565b60015b9250505092915050565b6000606060006040519080825280602002602001820160405280156108c757816020015b60608152602001906001900390816108b25790505b50905060006108d7848384611185565b905060008173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561093d57600080fd5b505afa158015610951573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610975919081019061351b565b141561098657600092505050610aee565b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016109dc9190613877565b60206040518083038186803b1580156109f457600080fd5b505afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a2c91908101906134c9565b73ffffffffffffffffffffffffffffffffffffffff1663fda69fae60066000815481101515610a5757fe5b906000526020600020016040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610a9991906139ab565b60206040518083038186803b158015610ab157600080fd5b505afa158015610ac5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ae9919081019061351b565b925050505b919050565b600080610aff83611fa3565b905060008114610b10576000610b13565b60015b915050919050565b600080610b2661103c565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610b8c57600080fd5b505afa158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bc491908101906134c9565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b51660066003815481101515610bf257fe5b906000526020600020016040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c349190613a3b565b600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b5050505060018273ffffffffffffffffffffffffffffffffffffffff1663bf2b70a186848673ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015610ce857600080fd5b505afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d209190810190613477565b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d5a93929190613936565b602060405180830381600087803b158015610d7457600080fd5b505af1158015610d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dac919081019061351b565b14610db8576000610dbb565b60015b92505050919050565b6060806000604051908082528060200260200182016040528015610dfc57816020015b6060815260200190600190039081610de75790505b5090506000610e0c848384611185565b905060008173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b","158015610e7257600080fd5b505afa158015610e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610eaa919081019061351b565b1415610eca57602060405190810160405280600081525092505050611037565b8073ffffffffffffffffffffffffffffffffffffffff1663846719e060006040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f209190613877565b60206040518083038186803b158015610f3857600080fd5b505afa158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f7091908101906134c9565b73ffffffffffffffffffffffffffffffffffffffff16639c981fcb60066002815481101515610f9b57fe5b906000526020600020016040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610fdd91906139ab565b60006040518083038186803b158015610ff557600080fd5b505afa158015611009573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506110329190810190613585565b925050505b919050565b60008061100190508073ffffffffffffffffffffffffffffffffffffffff1663f23f63c9600080016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161109c91906139ab565b60206040518083038186803b1580156110b457600080fd5b505afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ec91908101906134f2565b91505090565b6060600082141561113a576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611180565b5b60008214151561117f576000600a8381151561115357fe5b069050600a8381151561116257fe5b049250611177611171826121d3565b836123bb565b91505061113b565b5b919050565b6000815183511415156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613a90565b60405180910390fd5b60006111d761103c565b9050600084511415611326578073ffffffffffffffffffffffffffffffffffffffff1663e8434e39868373ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561126257600080fd5b505afa158015611276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061129a9190810190613477565b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112d39291906138d6565b60206040518083038186803b1580156112eb57600080fd5b505afa1580156112ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061132391908101906134a0565b91505b60008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561138a57600080fd5b505afa15801561139e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113c29190810190613477565b90506000600190505b8551811015611496578173ffffffffffffffffffffffffffffffffffffffff1663cd30a1d187838151811015156113fe57fe5b90602001906020020151878481518110151561141657fe5b906020019060200201516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611459929190613974565b60006040518083038186803b15801561147157600080fd5b505afa158015611485573d6000803e3d6000fd5b5050505080806001019150506113cb565b508173ffffffffffffffffffffffffffffffffffffffff1663e8434e3987836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016114ee9291906138d6565b60206040518083038186803b15801561150657600080fd5b505afa15801561151a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061153e91908101906134a0565b925050509392505050565b60006060600061155761103c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e8434e39868473ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156115da57600080fd5b505afa1580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116129190810190613477565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161164b9291906138d6565b60206040518083038186803b15801561166357600080fd5b505afa158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061169b91908101906134a0565b905061178b6000600301805480602002602001604051908101604052809291908181526020016000905b82821015611781578382906000526020600020018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561176d5780601f106117425761010080835404028352916020019161176d565b820191906000526020600020905b81548152906001019060200180831161175057829003601f168201915b5050505050815260200190600101906116c5565b505050508261258e565b935093505050915091565b606060008273ffffffffffffffffffffffffffffffffffffffff16600102905060606040805190810160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506060602a6040519080825280601f01601f1916602001820160405280156118265781602001600182028038833980820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110151561185957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811015156118b957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b6014811015611b445782600485600c840160208110151561190c57fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908060020a82049150507f0100000000000000000000000000000000000000000000000000000000000000900460ff1681518110151561198d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000282600283026002018151811015156119ec57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f7f01000000000000000000000000000000000000000000000000000000000000000285600c8401602081101515611a5257fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff16815181101515611aa857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028260028302600301815181101515611b0757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506118ef565b50809350505050919050565b60006001600060030180549050038251141515611b6c57600080fd5b6000806060611b7b8787612b67565b8092508193505050817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1415611f37576000611bb561103c565b905060008173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c1b57600080fd5b505afa158015611c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c5391908101906134c9565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b51660006001018b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611cb0929190613a04565b600060405180830381600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b51660006002018a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611d3d929190613a04565b600060405180830381600087803b158015611d5757600080fd5b505af1158015611d6b573d6000803e3d6000fd5b505050506000600190505b600060030180549050811015611e51578173ffffffffffffffffffffffffffffffffffffffff1663e942b516600060030183815481101515611db457fe5b906000526020600020018a60018503815181101515611dcf57fe5b906020019060200201516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e129291906139cd565b600060405180830381600087803b158015611e2c57600080fd5b505af1158015611e40573d6000803e3d6000fd5b505050508080600101915050611d76565b508173ffffffffffffffffffffffffffffffffffff","ffff166331afac368a836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611ea9929190613906565b602060405180830381600087803b158015611ec357600080fd5b505af1158015611ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611efb919081019061351b565b60011415611f0c5760009450611f30565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe94505b5050611f5b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505b7f9994ba29bf7f93f869f42bc2c06a947ca883df73b7c6eb95482a190d7e437cd2838888604051611f8e93929190613832565b60405180910390a18293505050509392505050565b600080611fae61103c565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561201457600080fd5b505afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061204c9190810190613477565b905060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3986846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016120a79291906138d6565b60206040518083038186803b1580156120bf57600080fd5b505afa1580156120d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120f791908101906134a0565b905060008173ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561215d57600080fd5b505afa158015612171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612195919081019061351b565b14156121c6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93505050506121ce565b600093505050505b919050565b6060806040805190810160405280601081526020017f30313233343536373839616263646566000000000000000000000000000000008152509050606083604051602001808281526020019150506040516020818303038152906040529050606060016040519080825280601f01601f1916602001820160405280156122685781602001600182028038833980820191505090505b50905060006001835103905083600f7f01000000000000000000000000000000000000000000000000000000000000000284838151811015156122a757fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff1681518110151561232557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000282600081518110151561237f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081945050505050919050565b6060808390506060839050606081518351016040519080825280601f01601f1916602001820160405280156123ff5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b85518110156124c557858181518110151561242957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561248857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612412565b5060008090505b845181101561257f5784818151811015156124e357fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561254257fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506124cc565b50829550505050505092915050565b60006060808373ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156125f557600080fd5b505afa158015612609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061262d919081019061351b565b60001415612664577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818191509250925050612b60565b6040805190810160405280600181526020017f5b00000000000000000000000000000000000000000000000000000000000000815250905060008090505b8473ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561270457600080fd5b505afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061273c919081019061351b565b811015612b125760606127f3878773ffffffffffffffffffffffffffffffffffffffff1663846719e0856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161279e9190613817565b60206040518083038186803b1580156127b657600080fd5b505afa1580156127ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127ee91908101906134c9565b612e47565b905060008090505b8151811015612a1c57600081141561289e5761289b846040805190810160405280600a81526020017f7b22696e646578223a220000000000000000000000000000000000000000000081525084600081518110151561285657fe5b906020019060200201516040805190810160405280600381526020017f222c7b0000000000000000000000000000000000000000000000000000000000815250612f85565b93505b612979846040805190810160405280600181526020017f22000000000000000000000000000000000000000000000000000000000000008152508a848151811015156128e657fe5b906020019060200201516040805190810160405280600381526020017f223a220000000000000000000000000000000000000000000000000000000000815250868681518110151561293457fe5b906020019060200201516040805190810160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250613048565b935060018251038114156129cd576129c6846040805190810160405280600281526020017f7d7d000000000000000000000000000000000000000000000000000000000000815250613147565b9350612a0f565b612a0c846040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250613147565b93505b80806001019150506127fb565b5060018673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015612a8157600080fd5b505afa158015612a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ab9919081019061351b565b0382141515612b0457612b01836040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250613147565b92505b5080806001019150506126a2565b50612b52816040805190810160405280600181526020017f5d00000000000000000000000000000000000000000000000000000000000000815250613147565b905060008181915092509250505b9250929050565b600060606000612b7561103c565b905060008173ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015612bdb57600080fd5b505afa158015612bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c139190810190613477565b90508073ffffffffffffffffffffffffffffffffffffffff1663cd30a1d16000600201876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612c70929190613a04565b60006040518083038186803b158015612c8857600080fd5b505afa158015612c9c573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff1663e8434e3988846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612cf99291906138d6565b60206040518083038186803b158015612d1157600080fd5b505afa158015612d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d4991908101906134a0565b9050612e396000600301805480602002602001604051908101604052809291908181526020016000905b82821015612e2f578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e1b5780601f10612df057610100808354040283529160200191612e1b565b820191906000526020600020905b815481529060010190602001808311612dfe57829003601f168201915b505050505081526020019060010190612d73565b505050508261258e565b945094505050509250929050565b6060808351604051908082528060200260200182016040528015612e7f5781","6020015b6060815260200190600190039081612e6a5790505b50905060008090505b8451811015612f7a578373ffffffffffffffffffffffffffffffffffffffff16639c981fcb8683815181101515612ebb57fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612efd9190613892565b60006040518083038186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612f529190810190613585565b8282815181101515612f6057fe5b906020019060200201819052508080600101915050612e88565b508091505092915050565b6060806004604051908082528060200260200182016040528015612fbd57816020015b6060815260200190600190039081612fa85790505b50905085816000815181101515612fd057fe5b9060200190602002018190525084816001815181101515612fed57fe5b906020019060200201819052508381600281518110151561300a57fe5b906020019060200201819052508281600381518110151561302757fe5b9060200190602002018190525061303d816131ce565b915050949350505050565b606080600660405190808252806020026020018201604052801561308057816020015b606081526020019060019003908161306b5790505b5090508781600081518110151561309357fe5b90602001906020020181905250868160018151811015156130b057fe5b90602001906020020181905250858160028151811015156130cd57fe5b90602001906020020181905250848160038151811015156130ea57fe5b906020019060200201819052508381600481518110151561310757fe5b906020019060200201819052508281600581518110151561312457fe5b9060200190602002018190525061313a816131ce565b9150509695505050505050565b606080600260405190808252806020026020018201604052801561317f57816020015b606081526020019060019003908161316a5790505b5090508381600081518110151561319257fe5b90602001906020020181905250828160018151811015156131af57fe5b906020019060200201819052506131c5816131ce565b91505092915050565b6060600080905060008090505b835181101561320e5783818151811015156131f257fe5b90602001906020020151518201915080806001019150506131db565b506060816040519080825280601f01601f1916602001820160405280156132445781602001600182028038833980820191505090505b5090506060819050600080905060008090505b8651811015613346576060878281518110151561327057fe5b90602001906020020151905060008090505b815181101561333757818181518110151561329957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000285858151811015156132f257fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535083806001019450508080600101915050613282565b50508080600101915050613257565b5081945050505050919050565b600061335f8251613b79565b905092915050565b60006133738251613b8b565b905092915050565b60006133878251613b9d565b905092915050565b600061339b8251613baf565b905092915050565b60006133af8251613bc1565b905092915050565b600082601f83011215156133ca57600080fd5b81356133dd6133d882613add565b613ab0565b915080825260208301602083018583830111156133f957600080fd5b613404838284613c2f565b50505092915050565b600082601f830112151561342057600080fd5b815161343361342e82613add565b613ab0565b9150808252602083016020830185838301111561344f57600080fd5b61345a838284613c3e565b50505092915050565b600061346f8235613bcb565b905092915050565b60006020828403121561348957600080fd5b600061349784828501613353565b91505092915050565b6000602082840312156134b257600080fd5b60006134c084828501613367565b91505092915050565b6000602082840312156134db57600080fd5b60006134e98482850161337b565b91505092915050565b60006020828403121561350457600080fd5b60006135128482850161338f565b91505092915050565b60006020828403121561352d57600080fd5b600061353b848285016133a3565b91505092915050565b60006020828403121561355657600080fd5b600082013567ffffffffffffffff81111561357057600080fd5b61357c848285016133b7565b91505092915050565b60006020828403121561359757600080fd5b600082015167ffffffffffffffff8111156135b157600080fd5b6135bd8482850161340d565b91505092915050565b600080604083850312156135d957600080fd5b600083013567ffffffffffffffff8111156135f357600080fd5b6135ff858286016133b7565b925050602061361085828601613463565b9150509250929050565b61362381613b43565b82525050565b61363281613bd5565b82525050565b61364181613bf9565b82525050565b61365081613b4f565b82525050565b61365f81613c1d565b82525050565b600061367082613b26565b808452613684816020860160208601613c3e565b61368d81613c71565b602085010191505092915050565b60006136a682613b1b565b8084526136ba816020860160208601613c3e565b6136c381613c71565b602085010191505092915050565b6000815460018116600081146136ee576001811461370e5761374f565b607f600283041680865260ff19831660208701526040860193505061374f565b6002820480865260208601955061372485613b09565b60005b8281101561374657815481890152600182019150602081019050613727565b80880195505050505b505092915050565b6000600182527f30000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600a82527f6b657920657869747321000000000000000000000000000000000000000000006020830152604082019050919050565b6000601082527f706172616d6574726963206572726f72000000000000000000000000000000006020830152604082019050919050565b6000602082019050613811600083018461361a565b92915050565b600060208201905061382c6000830184613647565b92915050565b60006060820190506138476000830186613647565b81810360208301526138598185613665565b9050818103604083015261386d8184613665565b9050949350505050565b600060208201905061388c6000830184613656565b92915050565b600060208201905081810360008301526138ac818461369b565b905092915050565b600060208201905081810360008301526138ce8184613665565b905092915050565b600060408201905081810360008301526138f08185613665565b90506138ff6020830184613629565b9392505050565b600060408201905081810360008301526139208185613665565b905061392f6020830184613638565b9392505050565b600060608201905081810360008301526139508186613665565b905061395f6020830185613638565b61396c6040830184613629565b949350505050565b6000604082019050818103600083015261398e818561369b565b905081810360208301526139a2818461369b565b90509392505050565b600060208201905081810360008301526139c581846136d1565b905092915050565b600060408201905081810360008301526139e781856136d1565b905081810360208301526139fb818461369b565b90509392505050565b60006040820190508181036000830152613a1e81856136d1565b90508181036020830152613a328184613665565b90509392505050565b60006040820190508181036000830152613a5581846136d1565b90508181036020830152613a6881613757565b905092915050565b60006020820190508181036000830152613a898161378e565b9050919050565b60006020820190508181036000830152613aa9816137c5565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715613ad357600080fd5b8060405250919050565b600067ffffffffffffffff821115613af457600080fd5b601f19601f8301169050602081019050919050565b60008160005260206000209050919050565b600081519050919050565b600081519050919050565b6000613b3c82613b59565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b8482613b31565b9050919050565b6000613b9682613b31565b9050919050565b6000613ba882613b31565b9050919050565b6000613bba82613b31565b9050919050565b6000819050919050565b6000819050919050565b6000613be082613be7565b9050919050565b6000613bf282613b59565b9050919050565b6000613c0482613c0b565b9050919050565b6000613c1682613b59565b9050919050565b6000613c2882613b4f565b9050919050565b82818337600083830152505050565b60005b83811015613c5c578082015181840152602081019050613c41565b83811115613c6b576000848401525b50505050565b6000601f19601f8301169050919050565b613c8a6140d5565b600060208301905060408051908101604052808451815260200182815250915050919050565b6060600082511415613cd45760206040519081016040528060008152509050613e0e565b60006001835103846000015102905060008090505b8351811015613d1f578381815181101515613d0057fe5b9060200190602002015160000151820191508080600101915050613ce9565b506060816040519080825280601f01601f191660200182016040528015613d555781602001600182028038833980820191505090505b509050600060208201905060008090505b8551811015613e0657613db0828783815181101515613d8157fe5b90602001906020020151602001518884815181101515613d9d57fe5b9060200190602002015160000151613f07565b8581815181101515613dbe57fe5b9060200190602002015160000151820191506001865103811015613df957613def8288602001518960000151613f07565b8660000151820191505b8080600101915050613d66565b508193505050505b92915050565b6000808260000151613e388560000151866020015186600001518760200151613f52565b0190505b836000015184602001510181111515613e845781806001019250508260000151613e7c85602001518303","8660000151038386600001518760200151613f52565b019050613e3c565b5092915050565b613e936140d5565b613e9e838383614037565b5092915050565b60608082600001516040519080825280601f01601f191660200182016040528015613edf5781602001600182028038833980820191505090505b5090506000602082019050613efd8185602001518660000151613f07565b8192505050919050565b5b602081101515613f2d5781518352602083019250602082019150602081039050613f08565b60006001826020036101000a0390508019835116818551168181178652505050505050565b6000808490506000868511151561402757602085111515613fdf57600060018660200360080260020a0319600102905060008186511690506000878a8a0103905060008386511690505b8281141515613fd1578186101515613fbe578a8a01965050505050505061402f565b8580600101965050838651169050613f9c565b85965050505050505061402f565b60008585209050600091505b85880382111515614025576000868420905080821415614011578394505050505061402f565b600184019350508180600101925050613feb565b505b868601925050505b949350505050565b61403f6140d5565b600061405d8560000151866020015186600001518760200151613f52565b9050846020015183602001818152505084602001518103836000018181525050846000015185602001510181141561409f5760008560000181815250506140ca565b8360000151836000015101856000018181510391508181525050836000015181018560200181815250505b829150509392505050565b60408051908101604052806000815260200160008152509056fea265627a7a7230582082099dbd305bff309f184c935808cad46ac4dd349f443ec622277f2130a118646c6578706572696d656e74616cf500377472616e736665725f616464726573732c7461726765745f616464726573732c747970652c74696d652c6469676974616c5f636f6c6c656374696f6e5f6964"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"selectByUserTranfer\",\"outputs\":[{\"name\":\"_code\",\"type\":\"int256\"},{\"name\":\"_res\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_transfer_address\",\"type\":\"string\"},{\"name\":\"_target_address\",\"type\":\"string\"},{\"name\":\"_type\",\"type\":\"string\"},{\"name\":\"_hash\",\"type\":\"string\"},{\"name\":\"_digital_collection_id\",\"type\":\"string\"}],\"name\":\"addDetail\",\"outputs\":[{\"name\":\"_res\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"hash\",\"type\":\"string\"}],\"name\":\"selectByHash\",\"outputs\":[{\"name\":\"_code\",\"type\":\"int256\"},{\"name\":\"_res\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"selectByUserAccept\",\"outputs\":[{\"name\":\"_code\",\"type\":\"int256\"},{\"name\":\"_res\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"retCode\",\"type\":\"int256\"},{\"indexed\":false,\"name\":\"primaryKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"uniqueKey\",\"type\":\"string\"}],\"name\":\"AddEvent\",\"type\":\"event\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_SELECTBYUSERTRANFER = "selectByUserTranfer";

    public static final String FUNC_ADDDETAIL = "addDetail";

    public static final String FUNC_SELECTBYHASH = "selectByHash";

    public static final String FUNC_SELECTBYUSERACCEPT = "selectByUserAccept";

    public static final Event ADDEVENT_EVENT = new Event("AddEvent",
            Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
    ;

    protected DetailStorage(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public Tuple2<BigInteger, String> selectByUserTranfer(String _address) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYUSERTRANFER,
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_address)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, String>(
                (BigInteger) results.get(0).getValue(),
                (String) results.get(1).getValue());
    }

    public TransactionReceipt addDetail(String _transfer_address, String _target_address, String _type, String _hash, String _digital_collection_id) {
        final Function function = new Function(
                FUNC_ADDDETAIL,
                Arrays.<Type>asList(new Utf8String(_transfer_address),
                new Utf8String(_target_address),
                new Utf8String(_type),
                new Utf8String(_hash),
                new Utf8String(_digital_collection_id)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addDetail(String _transfer_address, String _target_address, String _type, String _hash, String _digital_collection_id, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDDETAIL,
                Arrays.<Type>asList(new Utf8String(_transfer_address),
                new Utf8String(_target_address),
                new Utf8String(_type),
                new Utf8String(_hash),
                new Utf8String(_digital_collection_id)),
                Collections.<TypeReference<?>>emptyList());
         asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddDetail(String _transfer_address, String _target_address, String _type, String _hash, String _digital_collection_id) {
        final Function function = new Function(
                FUNC_ADDDETAIL,
                Arrays.<Type>asList(new Utf8String(_transfer_address),
                new Utf8String(_target_address),
                new Utf8String(_type),
                new Utf8String(_hash),
                new Utf8String(_digital_collection_id)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<String, String, String, String, String> getAddDetailInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDDETAIL,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<String, String, String, String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                (String) results.get(3).getValue(),
                (String) results.get(4).getValue()
                );
    }

    public Tuple1<Boolean> getAddDetailOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_ADDDETAIL,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public Tuple2<BigInteger, String> selectByHash(String hash) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYHASH,
                Arrays.<Type>asList(new Utf8String(hash)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, String>(
                (BigInteger) results.get(0).getValue(),
                (String) results.get(1).getValue());
    }

    public Tuple2<BigInteger, String> selectByUserAccept(String _address) throws ContractException {
        final Function function = new Function(FUNC_SELECTBYUSERACCEPT,
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Address(_address)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<BigInteger, String>(
                (BigInteger) results.get(0).getValue(),
                (String) results.get(1).getValue());
    }

    public List<AddEventEventResponse> getAddEventEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(ADDEVENT_EVENT, transactionReceipt);
        ArrayList<AddEventEventResponse> responses = new ArrayList<AddEventEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            AddEventEventResponse typedResponse = new AddEventEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.retCode = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.primaryKey = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.uniqueKey = (String) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeAddEventEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDEVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeAddEventEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(ADDEVENT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static DetailStorage load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new DetailStorage(contractAddress, client, credential);
    }

    public static DetailStorage deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(DetailStorage.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class AddEventEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger retCode;

        public String primaryKey;

        public String uniqueKey;
    }
}
